package com.zzw.hj28;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * @Project: hw_java
 * @Description: 素数伴侣
 * @Author: zzw
 */
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        //标准输入
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            //输入正偶数
            int n = sc.nextInt();
            //用于记录输入的n个整数
            int[] arr = new int[n];
            //用于存储所有的奇数
            ArrayList<Integer> odds = new ArrayList<>();
            //用于存储所有的偶数
            ArrayList<Integer> evens = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
                //将奇数添加到odds
                if (arr[i] % 2 == 1) {
                    odds.add(arr[i]);
                }
                //将偶数添加到evens
                if (arr[i] % 2 == 0) {
                    evens.add(arr[i]);
                }
            }
            //下标对应已经匹配的偶数的下标，值对应这个偶数的伴侣
            //注意1：参考str = "4 6 8 5 11 13";  5+6=11,11+6=17，互相争夺6
            //注意2：matcheven是全局的匹配的总数组，每个位置代表偶数的位置配对的奇数数值；
            //注意3：v数值代表每个奇数抢夺偶数时，奇数是否使用过的标志，每次奇数都会重置该数组，递归时使用它判断是否被用过；
            //注意4：当前偶数位置的配对奇数已经存在值matcheven[i]时，就要判断奇数值能否在非当前偶数之外找到素数伴侣，如果该奇数能找到新素数伴侣，则把该伴侣让给后来的奇数，依次类推；
            //注意5：该方法使用了两个利用偶数位置的数组，一个代表该偶数匹配的素数伴侣数组，另一个代表每次奇数抢夺偶数时记录偶数是否被占用的布尔数组
            int[] matcheven = new int[evens.size()];
            //记录伴侣的对数
            int count = 0;
            for (int j = 0; j < odds.size(); j++) {
                //用于标记对应的偶数是否查找过
                boolean[] v = new boolean[evens.size()];
                //如果匹配上，则计数加1
                if (find(odds.get(j), matcheven, evens, v)) {
                    count++;
                }
            }
            System.out.println(count);
        }
    }

    //判断奇数x能否找到伴侣
    private static boolean find(int x, int[] matcheven, ArrayList<Integer> evens,
                                boolean[] v) {
        for (int i = 0; i < evens.size(); i++) {
            //该位置偶数没被访问过，并且能与x组成素数伴侣
            if (isPrime(x + evens.get(i)) && v[i] == false) {
                v[i] = true;
                /*如果i位置偶数还没有伴侣，则与x组成伴侣，如果已经有伴侣，并且这个伴侣能重新找到新伴侣，
                则把原来伴侣让给别人，自己与x组成伴侣*/
                if (matcheven[i] == 0 || find(matcheven[i], matcheven, evens, v)) {
                    matcheven[i] = x;
                    return true;
                }
            }
        }
        return false;
    }

    //判断x是否是素数
    private static boolean isPrime(int x) {
        if (x == 1) return false;
        //如果能被2到根号x整除，则一定不是素数
        for (int i = 2; i <= Math.sqrt(x) + 0.5; i++) {
            if (x % i == 0) {
                return false;
            }
        }
        return true;
    }
}